chore(deps): update dependency react-router@>=6.7.0 <6.30.6 to v7 [security] - #9554
renovate[bot] wants to merge 1 commit into
Conversation
COMPARE TO
|
| Name | Diff |
|---|---|
| package.json | 0 Bytes |
| pnpm-lock.yaml | 📉 -465 Bytes |
There was a problem hiding this comment.
🟡 Changes recommended
The new react-router override targets v8 while the resolved dependency graph remains on React Router v6/React 18, creating a likely incompatibility and undermining the intended security upgrade.
Once you've addressed the issues Copilot identified, you can request another Copilot review.
Pull request overview
This PR (Renovate-generated) attempts to address React Router security advisories by updating the root-level pnpm override for react-router and refreshing the lockfile accordingly.
Changes:
- Updates the root
pnpm.overridesentry forreact-router@>=6.7.0 <6.30.6from^6.30.6to^8.0.0 - Updates
pnpm-lock.yamloverrides to reflect the newreact-routeroverride and includes some incidental lockfile normalization changes
File summaries
| File | Description |
|---|---|
| package.json | Changes root pnpm.overrides to force react-router to v8 for affected dependency ranges |
| pnpm-lock.yaml | Updates lockfile override metadata and related snapshot entries |
Review details
Files not reviewed (1)
- pnpm-lock.yaml: Generated file
- Files reviewed: 1/2 changed files
- Comments generated: 2
- Review effort level: Lite
💡 Add a code-review agent skill for context-aware, tailored reviews. Learn more in the docs.
| "prismjs@<1.30.0": "^1.30.0", | ||
| "qs@>=6.11.1 <6.15.2": "^6.15.2", | ||
| "react-router@>=6.7.0 <6.30.6": "^6.30.6", | ||
| "react-router@>=6.7.0 <6.30.6": "^8.0.0", |
| postcss@<8.5.18: ^8.5.18 | ||
| prismjs@<1.30.0: ^1.30.0 | ||
| qs@>=6.11.1 <6.15.2: ^6.15.2 | ||
| react-router@>=6.7.0 <6.30.6: ^6.30.6 | ||
| react-router@>=6.7.0 <6.30.6: ^8.0.0 | ||
| react-router-dom@>=6.7.0 <6.30.6: ^6.30.6 |
0c21e87 to
0898174
Compare
There was a problem hiding this comment.
🟡 Changes recommended
The override update does not result in react-router@7.18.0 being resolved in the lockfile (it remains 6.30.6), so the intended security upgrade is not actually applied and may cause inconsistent installs.
Once you've addressed the issues Copilot identified, you can request another Copilot review.
Review details
Files not reviewed (1)
- pnpm-lock.yaml: Generated file
Suppressed comments (1)
pnpm-lock.yaml:56
- This override forces react-router "^7.18.0" only for dependency specs in the ">=6.7.0 <6.30.6" range, but the lockfile still contains react-router@6.30.6 and react-router-dom@6.30.6, so the PR doesn’t actually update the installed React Router version. Consider updating the override selector (and react-router-dom) so the resolved versions become v7.18.0, then re-run pnpm to regenerate pnpm-lock.yaml.
- Files reviewed: 1/2 changed files
- Comments generated: 1
- Review effort level: Lite
| "qs@>=6.11.1 <6.15.2": "^6.15.2", | ||
| "react-router@>=6.7.0 <6.30.6": "^6.30.6", | ||
| "react-router@>=6.7.0 <6.30.6": "^7.18.0", | ||
| "react-router-dom@>=6.7.0 <6.30.6": "^6.30.6", | ||
| "rollup@>=4.0.0 <4.59.0": "^4.59.0", |
0898174 to
84e9f9a
Compare
There was a problem hiding this comment.
🔵 Needs a closer look
The override bumps react-router to a breaking major (v8) that is likely incompatible with the repo’s current React 18 setup and also appears inconsistent with the current lockfile resolution.
Review details
Files not reviewed (1)
- pnpm-lock.yaml: Generated file
Suppressed comments (2)
package.json:94
- The override bumps
react-routerfrom the v6 line to v8, which is a breaking major upgrade and is likely incompatible with this repo’s current React 18 setup (seepnpm.peerDependencyRules.allowedVersions.react: ^18.0.0in this same file). Also, the lockfile currently resolvesreact-router@6.30.6(noreact-router@8.xpresent), so this override doesn’t appear to be taking effect. Prefer keeping the security override within v6 (e.g.^6.30.6) to address the vulnerable range without introducing a major-version upgrade.
"react-router@>=6.7.0 <6.30.6": "^8.0.0",
pnpm-lock.yaml:55
- This lockfile override forces
react-routerto^8.0.0for the vulnerable selector range, but the lockfile itself currently containsreact-router@6.30.6and noreact-router@8.xentries, so the override is either unused or the lockfile wasn’t regenerated after changing it. To avoid an accidental future major bump (and keepreact-routeraligned withreact-router-dom@6.30.6), pin this override to^6.30.6instead.
- Files reviewed: 1/2 changed files
- Comments generated: 0 new
- Review effort level: Lite
84e9f9a to
e7a8c78
Compare
There was a problem hiding this comment.
🔵 Needs a closer look
The lockfile still resolves react-router@6.30.6 and contains no react-router@7.18.0, so the intended security upgrade is not actually applied.
Review details
Files not reviewed (1)
- pnpm-lock.yaml: Generated file
Suppressed comments (2)
package.json:96
- The
overridesentry bumpsreact-routerto^7.18.0, butreact-router-domis still held at^6.30.6and workspace packages appear to depend onreact-router-dom@^6.30.2(so a real v7 upgrade would likely require aligningreact-router-domto v7 and adjusting any breaking API usage). As-is, the lockfile still resolvesreact-router@6.30.6, so this change does not actually apply the intended security upgrade.
"react-router@>=6.7.0 <6.30.6": "^7.18.0",
"react-router-dom@>=6.7.0 <6.30.6": "^6.30.6",
"rollup@>=4.0.0 <4.59.0": "^4.59.0",
pnpm-lock.yaml:56
pnpm-lock.yamldoes not contain anyreact-router@7.18.0entries and still resolvesreact-router@6.30.6(including viareact-router-dom@6.30.6). This means the override change is currently ineffective and the lockfile is inconsistent with the intended dependency update; please regenerate the lockfile after updating the actual dependency constraints so the resolved versions match.
- Files reviewed: 1/2 changed files
- Comments generated: 0 new
- Review effort level: Lite
e7a8c78 to
64599a0
Compare
There was a problem hiding this comment.
🔵 Needs a closer look
The override does not upgrade the installed React Router 6 dependency pair to v7.
Review details
Files not reviewed (1)
- pnpm-lock.yaml: Generated file
Suppressed comments (1)
package.json:94
- This changes only an override selector whose current installed dependency does not match it: the lockfile still resolves
react-router-dom@6.30.6with its exactreact-router@6.30.6dependency (pnpm-lock.yaml:27312-27321), and there is noreact-router@7.18.0entry. Consequently, the application remains on React Router 6 and this PR does not deliver the stated v7 security upgrade. Please either upgrade thereact-router-dom/react-routerpair and adapt its consumers together, or keep the v6 override if 6.30.6 is the intended security-fixed version.
"react-router@>=6.7.0 <6.30.6": "^7.18.0",
- Files reviewed: 1/2 changed files
- Comments generated: 0 new
- Review effort level: Lite
There was a problem hiding this comment.
🟡 Changes recommended
The isolated override does not apply the advertised v8 upgrade; a coordinated migration is required.
Once you've addressed the issues Copilot identified, you can request another Copilot review.
Review details
Files not reviewed (1)
- pnpm-lock.yaml: Generated file
- Files reviewed: 1/2 changed files
- Comments generated: 1
- Review effort level: Lite
| "prismjs@<1.30.0": "^1.30.0", | ||
| "qs@>=6.11.1 <6.15.2": "^6.15.2", | ||
| "react-router@>=6.7.0 <6.30.6": "^6.30.6", | ||
| "react-router@>=6.7.0 <6.30.6": "^8.0.0", |
There was a problem hiding this comment.
🔵 Needs a closer look
The security update has no runtime effect until the compatible react-router-dom dependency and lockfile are updated.
Review details
Files not reviewed (1)
- pnpm-lock.yaml: Generated file
Suppressed comments (2)
package.json:94
- This override does not upgrade the dependency that the workspace actually installs: all consumers declare
react-router-dom6.x, whose resolved package still depends onreact-router6.30.6, and the selector here explicitly excludes6.30.6. The lockfile contains noreact-router7.18.0 entry, so this security update has no runtime effect; update thereact-router-domdependency/override and its callers together for a v7 migration, or keep the existing v6.30.6 override if v6 is intended.
"react-router@>=6.7.0 <6.30.6": "^7.18.0",
pnpm-lock.yaml:55
- This lockfile records the override as
^7.18.0, but its package and snapshot sections still resolvereact-router-dom@6.30.6->react-router@6.30.6(pnpm-lock.yaml:14285-14296and27312-27321). Thus a frozen install from this PR continues to use the v6 router and does not receive the advertised security update; regenerate the lockfile after updating the compatiblereact-router-domdependency as well.
- Files reviewed: 1/2 changed files
- Comments generated: 0 new
- Review effort level: Lite
There was a problem hiding this comment.
🔵 Needs a closer look
The override forces a major-version jump (react-router v6→v8) for a selector intended to patch older v6 ranges, which can introduce unexpected breaking/peer-dependency issues if it ever takes effect.
Review details
Files not reviewed (1)
- pnpm-lock.yaml: Generated file
Suppressed comments (2)
pnpm-lock.yaml:56
- This lockfile override forces
react-router@>=6.7.0 <6.30.6to^8.0.0, which is a major-version jump for a selector that is meant to patch older v6 ranges and may break consumers expecting the v6 API if this override is ever applied. Align this with the minimal patched version used elsewhere in the lockfile (currently6.30.6) unless you are intentionally migrating the codebase to React Router v8.
package.json:95 - The
pnpm.overridesselector targets React Router versions<6.30.6(a patch-level security pin), but it is currently being forced to^8.0.0, which is a major-version jump and can introduce breaking API/peer-dependency mismatches if any transitive dependency actually resolves through this selector. Since the lockfile currently resolvesreact-routerto6.30.6, this override likely isn’t doing anything today, but it could cause unexpected breakage in the future when a dependency brings in an older v6 range again.
"react-router@>=6.7.0 <6.30.6": "^8.0.0",
"react-router-dom@>=6.7.0 <6.30.6": "^6.30.6",
- Files reviewed: 1/2 changed files
- Comments generated: 0 new
- Review effort level: Lite
There was a problem hiding this comment.
🔵 Needs a closer look
The override forces a major-version jump (react-router v6 selector → v7 target) while the lockfile still resolves react-router@6.30.6, creating a high risk of incompatibility and likely not changing the installed dependency set as intended.
Review details
Files not reviewed (1)
- pnpm-lock.yaml: Generated file
Suppressed comments (2)
package.json:94
- The override selector targets React Router v6 consumers (<6.30.6) but forces a v7.x version. This is a major-version jump that can break packages expecting the v6 API, and the current lockfile resolves react-router to 6.30.6 anyway (no react-router@7.x entries), so this change likely doesn’t actually change what gets installed.
Consider keeping this override within the v6 line (e.g. 6.30.6) unless you’re intentionally migrating the codebase (and react-router-dom) to v7 in the same PR.
"react-router@>=6.7.0 <6.30.6": "^7.18.0",
pnpm-lock.yaml:55
- This lockfile override forces react-router v7.x for dependencies requesting v6 (<6.30.6). Since the lockfile currently resolves react-router@6.30.6 (and contains no react-router@7.x), the override appears unused and/or risks introducing an incompatible major version if a v6 consumer matches this selector.
Recommend keeping the override within the v6 major unless you’re upgrading react-router-dom and any app usage to v7 together.
- Files reviewed: 1/2 changed files
- Comments generated: 0 new
- Review effort level: Lite
There was a problem hiding this comment.
🔵 Needs a closer look
The React Router v8 migration is incomplete and the advertised upgrade is not delivered.
Review details
Files not reviewed (1)
- pnpm-lock.yaml: Generated file
Suppressed comments (2)
package.json:94
- This does not actually upgrade the router: all consumers still declare
react-router-dom6.x, whose 6.30.6 package depends onreact-router6.30.6 (as shown bypnpm-lock.yaml:27312-27317), and the lockfile still contains noreact-routerv8 entry. Either keep the compatible 6.30.6 override for this security fix, or perform the full v8 migration (including replacingreact-router-dom/imports and meeting v8's React and Node requirements); changing this override alone leaves the installed dependency unchanged.
"react-router@>=6.7.0 <6.30.6": "^8.0.0",
pnpm-lock.yaml:55
- This selector does not upgrade anything in the current workspace: all consumers declare
react-router-dom(for example,packages/account/package.json:99), and the lockfile still resolvesreact-router-dom@6.30.6toreact-router@6.30.6(lines 27312-27321); there is noreact-router@8entry. Since v8 also removesreact-router-dom, this standalone core override cannot deliver the advertised upgrade. Update the DOM-router consumers as a coordinated migration, or keep the patched v6 pair instead.
- Files reviewed: 1/2 changed files
- Comments generated: 0 new
- Review effort level: Lite
There was a problem hiding this comment.
🔵 Needs a closer look
Update the consumer stack and regenerate the lockfile, or retain a compatible patched v6 override.
Review details
Files not reviewed (1)
- pnpm-lock.yaml: Generated file
Suppressed comments (1)
package.json:94
- This change does not upgrade the dependency actually installed by this workspace: the lockfile still contains only
react-router@6.30.6, andreact-router-dom@6.30.6resolves to that version (pnpm-lock.yaml:27312-27319). Because this override selector only matches versions<6.30.6, no current dependency matches it, so the PR's v7 security update is absent from the resolved graph. If v7 is required, update thereact-router-dom/consumer stack and regenerate the lockfile together; otherwise keep the compatible patched v6 override.
"react-router@>=6.7.0 <6.30.6": "^7.18.0",
- Files reviewed: 1/2 changed files
- Comments generated: 0 new
- Review effort level: Lite
There was a problem hiding this comment.
🟡 Changes recommended
The dependency graph still resolves React Router 6.30.6 instead of the advertised v8 upgrade.
Once you've addressed the issues Copilot identified, you can request another Copilot review.
Review details
Files not reviewed (1)
- pnpm-lock.yaml: Generated file
- Files reviewed: 1/2 changed files
- Comments generated: 1
- Review effort level: Lite
| "prismjs@<1.30.0": "^1.30.0", | ||
| "qs@>=6.11.1 <6.15.2": "^6.15.2", | ||
| "react-router@>=6.7.0 <6.30.6": "^6.30.6", | ||
| "react-router@>=6.7.0 <6.30.6": "^8.0.0", |
There was a problem hiding this comment.
🔵 Needs a closer look
Update the React Router consumers and lockfile together, or explicitly retain a patched v6 resolution.
Review details
Files not reviewed (1)
- pnpm-lock.yaml: Generated file
Suppressed comments (1)
package.json:94
- This override does not affect the versions actually installed: its selector only matches
react-routerversions<6.30.6, while all three workspace consumers resolvereact-router-dom@6.30.6, which depends onreact-router@6.30.6; the lockfile contains noreact-router@7.18.0. As a result, this security update neither installs v7 nor changes the runtime dependency. If v7 is intended, update thereact-router-domconsumers and lockfile together (forcing v7 under v6react-router-domwould be incompatible); otherwise keep/use the patched v6 resolution explicitly.
"react-router@>=6.7.0 <6.30.6": "^7.18.0",
- Files reviewed: 1/2 changed files
- Comments generated: 0 new
- Review effort level: Lite
There was a problem hiding this comment.
🔵 Needs a closer look
The override and lockfile are inconsistent, and the v8 migration is incomplete.
Review details
Files not reviewed (1)
- pnpm-lock.yaml: Generated file
Suppressed comments (2)
package.json:94
- This override does not upgrade any dependency in this workspace: all three consumers declare
react-router-dom6.x, and the lockfile still contains onlyreact-router-dom@6.30.6with itsreact-router@6.30.6dependency—there is noreact-router@8.xsnapshot. If a package later matches this selector, forcing v8 would also be incompatible with the existingreact-router-domv6 imports and React 18.3.1 (v8 removesreact-router-domand requires React 19.2.7). Please either keep the patched v6 override or perform the coordinated v8 migration instead of changing this selector alone.
"react-router@>=6.7.0 <6.30.6": "^8.0.0",
pnpm-lock.yaml:55
- The lockfile does not contain the dependency this override requests: it still resolves
react-router-dom@6.30.6toreact-router@6.30.6(see the package and snapshot entries around lines 14292 and 27317), with noreact-router@8entry. This means the committed lockfile does not represent the changed override; frozen installs can reject it as stale or continue using v6. Regenerate the lockfile with the intended dependency graph before merging.
- Files reviewed: 1/2 changed files
- Comments generated: 0 new
- Review effort level: Lite
There was a problem hiding this comment.
🔵 Needs a closer look
The advertised React Router v7 upgrade is not installed, and the override could create an incompatible dependency graph.
Review details
Files not reviewed (1)
- pnpm-lock.yaml: Generated file
Suppressed comments (1)
package.json:94
- This changes only the replacement for vulnerable
react-routerversions<6.30.6, but the repository's actual graph still resolvesreact-router-dom@6.30.6withreact-router@6.30.6(the lockfile has no7.18.0entry). Thus the advertised v7 upgrade is not installed, while any future dependency matching this selector would be forced from v6 to an incompatible major without upgradingreact-router-domand the consuming code. Keep the patched v6 override here, or make the v7 migration a coordinated update of both router packages and their usages.
"react-router@>=6.7.0 <6.30.6": "^7.18.0",
- Files reviewed: 1/2 changed files
- Comments generated: 0 new
- Review effort level: Lite
There was a problem hiding this comment.
🔵 Needs a closer look
Complete the React Router v8 migration and regenerate the lockfile, or target a compatible patched v6 dependency.
Review details
Files not reviewed (1)
- pnpm-lock.yaml: Generated file
Suppressed comments (1)
package.json:94
- This override does not actually install React Router v8: the selector only matches requests below
6.30.6, while the workspace packages depend onreact-router-dom6.x, whose locked dependency remainsreact-router@6.30.6; the lockfile contains no v8 package. Forcing v8 onto this graph would also require the v8 migration (including replacingreact-router-domand upgrading the repo's React 18 setup), so please make that migration and regenerate the lockfile, or target a compatible patched v6 dependency instead.
"react-router@>=6.7.0 <6.30.6": "^8.0.0",
- Files reviewed: 1/2 changed files
- Comments generated: 0 new
- Review effort level: Lite
There was a problem hiding this comment.
🔵 Needs a closer look
The security update is ineffective because the lockfile still installs React Router 6.30.6.
Review details
Files not reviewed (1)
- pnpm-lock.yaml: Generated file
Suppressed comments (1)
package.json:94
- This override does not affect the dependency graph currently committed: the selector only matches
react-routerversions below6.30.6, whilereact-router-dom@6.30.6still installsreact-router@6.30.6(pnpm-lock.yaml:27312-27319), and the lockfile contains no7.18.0entry. Consequently this security PR leaves the installed React Router version unchanged; please either upgrade thereact-router-domconsumers to a compatible 7.18.0 pair and regenerate the lockfile, or remove this no-op override.
"react-router@>=6.7.0 <6.30.6": "^7.18.0",
- Files reviewed: 1/2 changed files
- Comments generated: 0 new
- Review effort level: Lite
There was a problem hiding this comment.
🔵 Needs a closer look
The override does not affect current React Router 6 workspaces and requires a coordinated React Router and React 19 migration.
Review details
Files not reviewed (1)
- pnpm-lock.yaml: Generated file
Suppressed comments (2)
package.json:94
- This does not actually upgrade the dependency used by the workspaces: they all consume
react-router-dom6.x, whose resolved package still depends onreact-router@6.30.6(pnpm-lock.yaml:27312-27319), and the lockfile contains noreact-router@8.xentry. The new selector therefore currently matches nothing, while applying v8 to a future 6.xreact-router-domdependency would be incompatible. Please either perform the coordinated v8 migration (including replacingreact-router-dom) or keep the compatible v6.30.6 override.
"react-router@>=6.7.0 <6.30.6": "^8.0.0",
package.json:94
- Even if the selector were broadened, React Router v8 requires React 19.2.7, but the account, console, and experience packages still pin React/React DOM 18.3.1. Installing v8 without upgrading those consumers would leave the workspace with unsupported peer versions, so this cannot be a dependency-only override.
"react-router@>=6.7.0 <6.30.6": "^8.0.0",
- Files reviewed: 1/2 changed files
- Comments generated: 0 new
- Review effort level: Lite
There was a problem hiding this comment.
🔵 Needs a closer look
The installed dependency graph remains on React Router 6.30.6, so the security upgrade is ineffective.
Review details
Files not reviewed (1)
- pnpm-lock.yaml: Generated file
Suppressed comments (1)
package.json:94
- This selector only matches
react-routerrequests below6.30.6, but every workspace consumer getsreact-routerthroughreact-router-dom@6.30.6, whose lockfile entry still depends onreact-router@6.30.6(pnpm-lock.yaml:27312-27319). Consequentlyreact-router@7.18.0is absent from the lockfile and this security upgrade has no effect on the installed graph. Please either retain the already-patched^6.30.6override or migrate the threereact-router-domconsumers to the v7 package and regenerate the lockfile rather than mixing a v7 router with the v6 wrapper.
"react-router@>=6.7.0 <6.30.6": "^7.18.0",
- Files reviewed: 1/2 changed files
- Comments generated: 0 new
- Review effort level: Lite
There was a problem hiding this comment.
🔵 Needs a closer look
The installed dependency remains on 6.30.6, so the security update is not applied.
Review details
Files not reviewed (1)
- pnpm-lock.yaml: Generated file
Suppressed comments (1)
package.json:94
- This override only matches
react-routerversions below 6.30.6, but the workspace consumers usereact-router-dom6.x and its locked dependency is exactlyreact-router@6.30.6(pnpm-lock.yaml:27312-27319). As a result, this change installs no v8 package and leaves the runtime on 6.30.6, so it does not apply the security update. Please update the actual React Router consumer to a compatible patched line (and perform the requiredreact-router-dom/React/Node migration if targeting v8), or target the appropriate v6 fix instead.
"react-router@>=6.7.0 <6.30.6": "^8.0.0",
- Files reviewed: 1/2 changed files
- Comments generated: 0 new
- Review effort level: Lite
There was a problem hiding this comment.
🔵 Needs a closer look
The requested security upgrade is not installed; the dependency graph remains on React Router 6.30.6.
Review details
Files not reviewed (1)
- pnpm-lock.yaml: Generated file
Suppressed comments (2)
package.json:94
- This override is not applied to the dependency actually installed here: every workspace consumer uses
react-router-dom6.30.6, whose lockfile entry pinsreact-routerto 6.30.6 (seepnpm-lock.yaml:27312-27317), which is outside the>=6.7.0 <6.30.6selector. The lockfile contains noreact-router7.18.0, so this PR does not deliver the advertised security upgrade; please perform a coherent React Router v7 migration (includingreact-router-domand its callers) or target a compatible patched v6 version instead.
"react-router@>=6.7.0 <6.30.6": "^7.18.0",
pnpm-lock.yaml:55
- The lockfile records the override as
^7.18.0, but it still contains onlyreact-router@6.30.6andreact-router-dom@6.30.6snapshots, with the latter depending on the former. This lockfile therefore does not install the version this PR claims to update; regenerate it after updating the effectivereact-router-domdependency graph.
- Files reviewed: 1/2 changed files
- Comments generated: 0 new
- Review effort level: Lite
There was a problem hiding this comment.
🔵 Needs a closer look
The dependency remains on React Router 6 and the proposed v8 requirements are incompatible with the supported runtime matrix.
Review details
Files not reviewed (1)
- pnpm-lock.yaml: Generated file
Suppressed comments (3)
package.json:94
- React Router 8's published requirements are not compatible with this repository's supported matrix: v8 requires Node >=22.22.0 and React >=19.2.7, while the root and UI packages declare Node ^22.14.0 and React 18.3.1 (with the root peer rules explicitly allowing React 18). Even after migrating the DOM package, this override would make the dependency unsupported until those runtime and React constraints are updated together.
"react-router@>=6.7.0 <6.30.6": "^8.0.0",
package.json:94
- This override does not upgrade the router used by the workspace: the UI packages still depend on
react-router-dom6, and the lockfile resolves its child asreact-router@6.30.6(pnpm-lock.yaml:27312-27319). Since the override selector stops before 6.30.6, the new^8.0.0target is never applied, so this security update leaves the existing runtime in place. Please either use a compatible patched v6 release or migratereact-router-domand its imports together with the required v8 changes.
"react-router@>=6.7.0 <6.30.6": "^8.0.0",
pnpm-lock.yaml:55
- The lockfile still resolves only
react-router@6.30.6;react-router-dom@6.30.6also depends on that exact version. Because this override selector ends at<6.30.6, it does not match the resolved package, so this PR does not install 8.x or remediate the dependency it is meant to update. Please change the dependency graph/selector and regenerate the lockfile so the resulting graph contains the intended patched version.
- Files reviewed: 1/2 changed files
- Comments generated: 0 new
- Review effort level: Lite
There was a problem hiding this comment.
🔵 Needs a closer look
The intended v7 update is not installed, and the override must be aligned with consumers and the lockfile.
Review details
Files not reviewed (1)
- pnpm-lock.yaml: Generated file
Suppressed comments (2)
package.json:94
- This override has no matching request in the current workspace: the consumers declare
react-router-dom^6.30.2, and the lockfile resolves that package to6.30.6withreact-router@6.30.6. Therefore no7.18.0is installed, so this change does not perform the stated update; if a future dependency matches this selector, it would instead be silently forced across a major version without a corresponding migration. Keep the override at the patched v6 range, or update the actual consumers and lockfile together as a deliberate v7 migration.
"react-router@>=6.7.0 <6.30.6": "^7.18.0",
pnpm-lock.yaml:55
- The lockfile still contains only
react-router@6.30.6;react-router@7.18.0is absent, andreact-router-dom@6.30.6continues to depend onreact-router@6.30.6. Thus this override change does not update the installed graph, while it can inject a major version into any future matching v6 request. Keep the lockfile on the patched v6 override, or update all consumers to v7 together.
- Files reviewed: 1/2 changed files
- Comments generated: 0 new
- Review effort level: Lite
There was a problem hiding this comment.
🟡 Changes recommended
The installed dependency remains on React Router 6.30.6, so the security upgrade is not effective.
Get a fresh assessment by requesting another Copilot review.
Review details
Files not reviewed (1)
- pnpm-lock.yaml: Generated file
- Files reviewed: 1/2 changed files
- Comments generated: 1
- Review effort level: Lite
| "prismjs@<1.30.0": "^1.30.0", | ||
| "qs@>=6.11.1 <6.15.2": "^6.15.2", | ||
| "react-router@>=6.7.0 <6.30.6": "^6.30.6", | ||
| "react-router@>=6.7.0 <6.30.6": "^8.0.0", |
There was a problem hiding this comment.
🔵 Needs a closer look
The security fix is not present in the installed dependency graph; upgrade the paired router dependencies and regenerate the lockfile.
Review details
Files not reviewed (1)
- pnpm-lock.yaml: Generated file
Suppressed comments (2)
package.json:94
- This selector only applies to
react-routerversions below 6.30.6, but the workspace'sreact-router-dom@6.30.6resolves its nested dependency exactly toreact-router@6.30.6(seepnpm-lock.yaml:27312-27319). The resulting lockfile contains noreact-router@7.18.0, so this PR has no effect on the installed router despite the v7 upgrade described by the PR. Please update the router/dom dependency set together (or otherwise target the dependency that is actually resolved) and regenerate the lockfile.
"react-router@>=6.7.0 <6.30.6": "^7.18.0",
pnpm-lock.yaml:55
- This override does not upgrade the router actually used by the workspace: every consumer declares
react-router-dom6.x, and the lockfile still resolvesreact-router-dom@6.30.6with its exactreact-router@6.30.6dependency (there is noreact-router@7.18.0snapshot). Because the selector excludes that exact 6.30.6 request, the security fix is not present in the installed graph. Upgrade the pairedreact-router-domdependency to the compatible v7 release (and migrate any affected APIs) or otherwise resolve a patched router version, then regenerate the lockfile.
- Files reviewed: 1/2 changed files
- Comments generated: 0 new
- Review effort level: Lite
There was a problem hiding this comment.
🔵 Needs a closer look
The advertised v8 security update is not applied; coordinate a compatible migration or target a patched v6 release.
Review details
Files not reviewed (1)
- pnpm-lock.yaml: Generated file
Suppressed comments (1)
package.json:94
- This override change does not upgrade the dependency used by the workspace: all consumers depend on
react-router-dom6.x, whose lockfile entry still resolvesreact-routerto 6.30.6 (pnpm-lock.yaml:27312-27319), and the selector here only matches requests below 6.30.6. Thus the advertised v8 security update is absent from the installed graph. If v8 is required, this needs a coordinated migration because v8 removesreact-router-domand requires React 19.2.7, while these packages use React 18; otherwise the override should target a patched v6 version that is actually compatible with the current consumers.
"react-router@>=6.7.0 <6.30.6": "^8.0.0",
- Files reviewed: 1/2 changed files
- Comments generated: 0 new
- Review effort level: Lite
There was a problem hiding this comment.
🔵 Needs a closer look
The lockfile still resolves React Router 6.30.6, so the advertised v7.18.0 security update is not applied.
Review details
Files not reviewed (1)
- pnpm-lock.yaml: Generated file
Suppressed comments (1)
package.json:94
- This override still targets only
react-routerversions<6.30.6, so it cannot match thereact-router@6.30.6dependency that is actually installed. The lockfile consequently still resolvesreact-router@6.30.6underreact-router-dom@6.30.6(pnpm-lock.yaml:27312-27321), meaning the advertised v7.18.0 security update is not applied; please update the compatible router/dom dependency graph and regenerate the lockfile.
"react-router@>=6.7.0 <6.30.6": "^7.18.0",
- Files reviewed: 1/2 changed files
- Comments generated: 0 new
- Review effort level: Lite
There was a problem hiding this comment.
🔵 Needs a closer look
The workspace still installs React Router 6.30.6, so the security remediation is not applied.
Review details
Files not reviewed (1)
- pnpm-lock.yaml: Generated file
Suppressed comments (2)
package.json:94
- This does not update the router used by the workspace: all three applications depend on
react-router-dom6.x, whose locked dependency is the exactreact-router@6.30.6, so this range-specific override does not match it (and the lockfile contains no v8 package). Moreover, React Router v8 removesreact-router-domand requires React 19.2.7, while these apps use React 18. Please make this a coordinated router/React migration (including the import changes), or use a security-fixed version compatible with the existing v6 stack; as written, the vulnerable dependency remains installed.
"react-router@>=6.7.0 <6.30.6": "^8.0.0",
pnpm-lock.yaml:55
- The lockfile still resolves the only
react-routerinstance to 6.30.6 (react-router-dom@6.30.6depends on that exact version atpnpm-lock.yaml:27317), so this override change does not install v8 or remediate the security update. Regenerate the lockfile after updating the dependency graph and verify that the resolved router version is the intended fixed version.
- Files reviewed: 1/2 changed files
- Comments generated: 0 new
- Review effort level: Lite
There was a problem hiding this comment.
🔵 Needs a closer look
Update the effective React Router dependency path and regenerate the lockfile.
Review details
Files not reviewed (1)
- pnpm-lock.yaml: Generated file
Suppressed comments (1)
package.json:94
- This override still only matches
react-routerrequests in>=6.7.0 <6.30.6, but the lockfile resolves the only runtime dependency asreact-router-dom@6.30.6→react-router@6.30.6(pnpm-lock.yaml:27312-27321), which does not satisfy that selector. Consequently changing the replacement to^7.18.0installs no v7 package and does not deliver the security upgrade described by this PR; update the actualreact-router-dom/react-routerdependency path and regenerate the lockfile.
"react-router@>=6.7.0 <6.30.6": "^7.18.0",
- Files reviewed: 1/2 changed files
- Comments generated: 0 new
- Review effort level: Lite
There was a problem hiding this comment.
🔵 Needs a closer look
Complete the coordinated React Router v8 migration or retain the patched v6 graph and regenerate the lockfile.
Review details
Files not reviewed (1)
- pnpm-lock.yaml: Generated file
Suppressed comments (2)
package.json:94
- React Router v8 is not drop-in compatible with this workspace:
packages/account,packages/console, andpackages/experiencestill depend onreact-router-dom^6.30.2, while v8 removesreact-router-dom; those packages also use React 18.3.1, below v8's required React 19.2.7. Applying this override would therefore either leave the graph on v6 or create an incompatible mixed graph. Keep the patched v6 override, or perform the full v8 migration (including imports and React) as a coordinated change.
"react-router@>=6.7.0 <6.30.6": "^8.0.0",
pnpm-lock.yaml:55
react-routeris still locked at6.30.6(see the package and snapshot entries atpnpm-lock.yaml:14292andpnpm-lock.yaml:27319), and this lockfile contains no8.xentry. A frozen install therefore does not install the version advertised by this override, so the dependency update is not actually represented in the lockfile. Please regenerate the lockfile after applying a compatible upgrade/migration, or retain the patched v6 graph.
- Files reviewed: 1/2 changed files
- Comments generated: 0 new
- Review effort level: Lite
There was a problem hiding this comment.
🔵 Needs a closer look
The security update is not applied to the resolved dependency graph; compatible consumers and the lockfile must be updated.
Review details
Files not reviewed (1)
- pnpm-lock.yaml: Generated file
Suppressed comments (2)
package.json:94
- This override does not update the dependency actually installed by this workspace:
react-router-dom@6.30.6still declaresreact-router: 6.30.6, and the lockfile contains noreact-router@7.18.0snapshot (seepnpm-lock.yaml:27312-27319). As a result, the security update advertised by this PR is not applied to the current graph. Either retain the compatible v6 fix if 6.30.6 is sufficient, or upgrade thereact-router-domconsumers and regenerate the lockfile so the patched v7 package is genuinely resolved.
"react-router@>=6.7.0 <6.30.6": "^7.18.0",
pnpm-lock.yaml:55
- This override is not reflected in the lockfile: there is no
react-router@7.18.0entry, andreact-router-dom@6.30.6still resolvesreact-router@6.30.6(pnpm-lock.yaml:27312-27321). A frozen install will therefore keep the old router and this security update has no effect. Please regenerate the lockfile and update the matching dependency edges together, while keeping thereact-router-dom/react-routerversions compatible.
- Files reviewed: 1/2 changed files
- Comments generated: 0 new
- Review effort level: Lite
There was a problem hiding this comment.
🔵 Needs a closer look
Migrate all router consumers and React to compatible versions before targeting React Router v8.
Review details
Files not reviewed (1)
- pnpm-lock.yaml: Generated file
Suppressed comments (1)
package.json:94
- This override cannot be changed to
^8.0.0independently of the existing consumers: all three workspaces still depend onreact-router-dom6.x, whose locked package depends onreact-router6.30.6 (pnpm-lock.yaml:27312-27321), and the applications use React 18.3.1. React Router 8 removesreact-router-domand requires React 19.2.7, so forcing v8 for any matching older transitive request would break installation or runtime; with the current<6.30.6selector it is also a no-op in the current lockfile. Keep the compatible^6.30.6override, or migrate all router consumers and React before targeting v8.
"react-router@>=6.7.0 <6.30.6": "^8.0.0",
- Files reviewed: 1/2 changed files
- Comments generated: 0 new
- Review effort level: Lite
There was a problem hiding this comment.
🔵 Needs a closer look
The override does not match current dependencies, so the intended v7/security update is not applied.
Review details
Files not reviewed (1)
- pnpm-lock.yaml: Generated file
Suppressed comments (1)
package.json:94
- This override is not applied by the current workspace: all three consumers declare
react-router-dom^6.30.2, which resolves toreact-router-dom@6.30.6, and that package depends on the exactreact-router@6.30.6; the<6.30.6selector therefore does not match. The lockfile consequently contains noreact-router@7.18.0, so this PR does not perform the advertised v7/security update. Update the pairedreact-router-domdependencies and lockfile for a real v7 migration, or retain the fixed v6 override if no migration is intended.
"react-router@>=6.7.0 <6.30.6": "^7.18.0",
- Files reviewed: 1/2 changed files
- Comments generated: 0 new
- Review effort level: Lite
This PR contains the following updates:
^6.30.6→^7.18.0](https://renovatebot.com/diffs/npm/react-router@>=6.7.0 <6.30.6/6.30.6/7.18.0)React Router: Arbitrary Constructor Injection via deserializeErrors() in React Router SSR Hydration
CVE-2026-53666 / GHSA-337j-9hxr-rhxg
More information
Details
If application code allows attacker supplied input to overwrite certain aspects of errors caught by the SSR process, then it was possible for attacker to trigger unexpected constructor execution on the client which would trigger outbound network traffic. This is only possible with very specific (and unlikely) application layer code.
Severity
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:NReferences
This data is provided by the GitHub Advisory Database (CC-BY 4.0).
React Router: Open redirect via backslash in and useNavigate (CVE-2025-68470 bypass)
CVE-2026-53669 / GHSA-wrjc-x8rr-h8h6
More information
Details
This is a follow up to CVE-2025-68470. React Router was alerted to certain scenarios in which the fix there was incomplete so there still existed some scenarios where attacker supplied paths passed to navigation mechanisms could result in unexpected external navigations.
Severity
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:A/VC:N/VI:L/VA:N/SC:L/SI:L/SA:NReferences
This data is provided by the GitHub Advisory Database (CC-BY 4.0).
Release Notes
remix-run/react-router (react-router@>=6.7.0 <6.30.6)
v7.18.0Compare Source
Patch Changes
ssr: falseandfuture.v8_trailingSlashAwareDataRequests: true. Avoids false positive "SPA Mode" detection when serving prerendered paths (#15173)ServerRouternonce for nonce-aware SSR components when they don't provide their own value so strict CSP pages can load them. (#15170)turbo-streamto serialize and deserialize Framework Mode hydration errors (#15175)v7.17.0Compare Source
Minor Changes
Ship a subset of the official documentation inside the
react-routerpackage (#15121)node_modules/react-router/docs, letting AI coding agents and the React Router agent skills read official docs locallyapi/),community/content, and tutorials (tutorials/)v7.16.0Compare Source
Minor Changes
future.unstable_trailingSlashAwareDataRequestsasfuture.v8_trailingSlashAwareDataRequests(#15098)Patch Changes
Disable manifest path when lazy route dicovery is disabled (#15068)
Fix browser URL creation to use the configured history window instead of the global window. (#15066)
createBrowserURLImplso custom window contexts keep the correct URL origin.Fix
useNavigation()return type to preserve discriminated union across navigation states (#15095)Widen
MetaDescriptorscript:ld+jsontype fromLdJsonObjecttoLdJsonObject | LdJsonObject[]to permit multiple JSON-LD schemas in a single<script type="application/ld+json">tag emitted by<Meta />(#15082)v7.15.1Compare Source
Patch Changes
serverLoader()returning stale SSR data when a client navigation aborts pending hydration before the hydrationclientLoaderresolves (#15022)RouterProvideronErrorcallback not being called for synchronous initial loader errors in SPA mode (#15039) (#14942)useFetchersto return a stable identity and only change if fetchers changed (#15028)Unstable Changes
unstable_useRouterState()hook that consolidates access to active and pending router states (RFC: #12358) (#15017)Data/Framework/RSC only — throws when used without a data router
This should allow you to consolidate usages of the following hooks which will likely be deprecated and removed in a future major version
useLocationuseSearchParamsuseParamsuseMatchesuseNavigationTypeuseNavigationv7.15.0Compare Source
Minor Changes
Stabilize
unstable_defaultShouldRevalidateasdefaultShouldRevalidateon<Link>,<Form>,useLinkClickHandler,useSubmit,fetcher.submit, andsetSearchParams(a993f09)Stabilize the instrumentation APIs.
unstable_instrumentationsis nowinstrumentationsandunstable_patternis nowpattern(a993f09)unstable_ServerInstrumentation,unstable_ClientInstrumentation,unstable_InstrumentRequestHandlerFunction,unstable_InstrumentRouterFunction,unstable_InstrumentRouteFunction, andunstable_InstrumentationHandlerResulttypes have had theirunstable_prefixes removedStabilize
unstable_maskasmaskon<Link>,useLinkClickHandler, anduseNavigate, and rename the correspondingLocation.unstable_maskfield toLocation.mask(a993f09)Stabilize the
unstable_normalizePathoption onstaticHandler.queryandstaticHandler.queryRouteasnormalizePath(a993f09)Stabilize
future.unstable_passThroughRequestsasfuture.v8_passThroughRequests(a993f09)Remove
unstable_subResourceIntegrityfrom the runtimeFutureConfigtype; the flag is now controlled by the top-levelsubResourceIntegrityoption inreact-router.config.ts(a993f09)Stabilize
unstable_urlasurlonloader,action, andmiddlewarefunction args (a993f09)Stabilize
unstable_useTransitionsasuseTransitionson<BrowserRouter>,<HashRouter>,<HistoryRouter>,<MemoryRouter>,<Router>,<RouterProvider>,<HydratedRouter>, anduseLinkClickHandler(a993f09)Patch Changes
Add
nonceto<Scripts><link rel="modulepreload">elements (if provided) (af5d49b)Fix a bug with
unstable_defaultShouldRevalidate={false}where parent routes that did not export ashouldRevalidatefunction could be incorrectly included in the single fetch call for new child route data (#15012)Improve server-side route matching performance by pre-computing flattened/cached route branches (#14967) (af5d49b)
Mark
maskas an optional field inLocationfor easier mocking in unit tests (#14999)Cache flattened/ranked route branches to optimize server-side route matching (#14967)
Improve route matching performance in Framework/Data Mode (#14971) (af5d49b)
matchRoutesin data router scenarios7.6.0(#13562)matchesbut always updatingmatch.routeto the latest route in themanifestv7.14.2Compare Source
Patch Changes
Remove the un-documented custom error serialization logic from the internal turbo-stream implementation. React Router only automatically handles serialization of
Errorand it's standard subtypes (SyntaxError,TypeError, etc.). ([aabf4a1)Properly handle parent middleware redirects during
fetcher.load([aabf4a1)Remove redundant
Omit<RouterProviderProps, "flushSync">fromreact-router/domRouterProvider([aabf4a1)Improved types for
generatePath'sparamarg ([aabf4a1)Type errors when required params are omitted:
Allow omission of optional params:
Allows extra keys:
v7.14.1Compare Source
Patch Changes
HydrateFallbackand initial loaders land before therouter.subscribecall happens in theRouterProviderlayout effectv7.14.0Compare Source
Patch Changes
UNSTABLE RSC FRAMEWORK MODE BREAKING CHANGE - Existing route module exports remain unchanged from stable v7 non-RSC mode, but new exports are added for RSC mode. If you want to use RSC features, you will need to update your route modules to export the new annotations. (#14901)
If you are using RSC framework mode currently, you will need to update your route modules to the new conventions. The following route module components have their own mutually exclusive server component counterparts:
ServerComponentdefaultServerErrorBoundaryErrorBoundaryServerLayoutLayoutServerHydrateFallbackHydrateFallbackIf you were previously exporting a
ServerComponent, yourErrorBoundary,Layout, andHydrateFallbackwere also server components. If you want to keep those as server components, you can rename them and prefix them withServer. If you were previously importing the implementations of those components from a client module, you can simply inline them.Example:
Before
After
rsc Link prefetch (#14902)
Remove recursion from turbo-stream v2 allowing for encoding / decoding of massive payloads. (#14838)
encodeViaTurboStream leaked memory via unremoved AbortSignal listener (#14900)
v7.13.2Compare Source
Patch Changes
Fix clientLoader.hydrate when an ancestor route is also hydrating a clientLoader (#14835)
Fix type error when passing Framework Mode route components using
Route.ComponentPropstocreateRoutesStub(#14892)Fix percent encoding in relative path navigation (#14786)
Add
future.unstable_passThroughRequestsflag (#14775)By default, React Router normalizes the
request.urlpassed to yourloader,action, andmiddlewarefunctions by removing React Router's internal implementation details (.datasuffixes,index+_routesquery params).Enabling this flag removes that normalization and passes the raw HTTP
requestinstance to your handlers. This provides a few benefits:new Request()calls on the critical path.datasuffix (useful for observability purposes)If you were previously relying on the normalization of
request.url, you can switch to use the new siblingunstable_urlparameter which contains aURLinstance representing the normalized location:Internal refactor to consolidate framework-agnostic/React-specific route type layers - no public API changes (#14765)
Sync protocol validation to rsc flows (#14882)
Add a new
unstable_url: URLparameter to route handler methods (loader,action,middleware, etc.) representing the normalized URL the application is navigating to or fetching, with React Router implementation details removed (.datasuffix,index/_routesquery params) (#14775)This is being added alongside the new
future.unstable_passthroughRequestsfuture flag so that users still have a way to access the normalized URL when that flag is enabled and non-normalizedrequest's are being passed to your handlers. When adopting this flag, you will only need to start leveraging this new parameter if you are relying on the normalization ofrequest.urlin your application code.If you don't have the flag enabled, then
unstable_urlwill matchrequest.url.v7.13.1Compare Source
Patch Changes
fix null reference exception in bad codepath leading to invalid route tree comparisons (#14780)
fix: clear timeout when turbo-stream encoding completes (#14810)
Improve error message when Origin header is invalid (#14743)
Fix matchPath optional params matching without a "/" separator. (#14689)
add RSC unstable_getRequest (#14758)
Fix
HydrateFallbackrendering during initial lazy route discovery with matching splat route (#14740)[UNSTABLE] Add support for
<Link unstable_mask>in Data Mode which allows users to navigate to a URL in the router but "mask" the URL displayed in the browser. This is useful for contextual routing usages such as displaying an image in a model on top of a gallery, but displaying a browser URL directly to the image that can be shared and loaded without the contextual gallery in the background. (#14716)Notes:
useLocation().unstable_maskso you can detect whether you are currently masked or not.history.stateduring SSR.backgroundLocationmanagement.RSC: Update failed origin checks to return a 400 status and appropriate UI instead of a generic 500 (#14755)
Preserve query parameters and hash on manifest version mismatch reload (#14813)
v7.13.0Compare Source
Minor Changes
crossOriginprop toLinkscomponent (#14687)Patch Changes
allowedActionOriginsglob check so**matches all domains (#14722)v7.12.0Compare Source
Minor Changes
react-router.config.tsconfigallowedActionOriginsfield. (#14708)Patch Changes
Fix
generatePathwhen used with suffixed params (i.e., "/books/:id.json") (#14269)Export
UNSAFE_createMemoryHistoryandUNSAFE_createHashHistoryalongsideUNSAFE_createBrowserHistoryfor consistency. These are not intended to be used for new apps but intended to help apps usiongunstable_HistoryRoutermigrate from v6->v7 so they can adopt the newer APIs. (#14663)Escape HTML in scroll restoration keys (#14705)
Validate redirect locations (#14706)
[UNSTABLE] Pass
<Scripts nonce>value through to the underlyingimportmapscripttag when usingfuture.unstable_subResourceIntegrity(#14675)[UNSTABLE] Add a new
future.unstable_trailingSlashAwareDataRequestsflag to provide consistent behavior ofrequest.pathnameinsidemiddleware,loader, andactionfunctions on document and data requests when a trailing slash is present in the browser URL. (#14644)Currently, your HTTP and
requestpathnames would be as follows for/a/b/cand/a/b/c//a/b/crequestpathname`/a/b/c/a/b/c✅/a/b/c.data/a/b/c✅/a/b/c/requestpathname`/a/b/c//a/b/c/✅/a/b/c.data/a/b/cWith this flag enabled, these pathnames will be made consistent though a new
_.dataformat for client-side.datarequests:/a/b/crequestpathname`/a/b/c/a/b/c✅/a/b/c.data/a/b/c✅/a/b/c/requestpathname`/a/b/c//a/b/c/✅/a/b/c/_.data⬅️/a/b/c/✅This a bug fix but we are putting it behind an opt-in flag because it has the potential to be a "breaking bug fix" if you are relying on the URL format for any other application or caching logic.
Enabling this flag also changes the format of client side
.datarequests from/_root.datato/_.datawhen navigating to/to align with the new format. This does not impact therequestpathname which is still/in all cases.Preserve
clientLoader.hydrate=truewhen using<HydratedRouter unstable_instrumentations>(#14674)v7.11.0Compare Source
Minor Changes
<HydratedRouter onError>/<RouterProvider onError>(#14546)Patch Changes
add support for throwing redirect Response's at RSC render time (#14596)
Support for throwing
data()and Response from server component render phase. Response body is not serialized as async work is not allowed as error encoding phase. If you wish to transmit data to the boundary, throwdata()instead. (#14632)Fix
unstable_useTransitionsprop on<Router>component to permit omission for backewards compatibility (#14646)routeRSCServerRequestreplacefetchServerwithserverResponse(#14597)[UNSTABLE] Add a new
unstable_defaultShouldRevalidateflag to various APIs to allow opt-ing out of standard revalidation behaviors. (#14542)If active routes include a
shouldRevalidatefunction, then your value will be passed asdefaultShouldRevalidatein those function so that the route always has the final revalidation determination.<Form method="post" unstable_defaultShouldRevalidate={false}>submit(data, { method: "post", unstable_defaultShouldRevalidate: false })<fetcher.Form method="post" unstable_defaultShouldRevalidate={false}>fetcher.submit(data, { method: "post", unstable_defaultShouldRevalidate: false })This is also available on non-submission APIs that may trigger revalidations due to changing search params:
<Link to="/" unstable_defaultShouldRevalidate={false}>navigate("/?foo=bar", { unstable_defaultShouldRevalidate: false })setSearchParams(params, { unstable_defaultShouldRevalidate: false })Allow redirects to be returned from client side middleware (#14598)
Handle
dataStrategyimplementations that return insufficient result sets by adding errors for routes without any available result (#14627)v7.10.1Compare Source
Patch Changes
useOptimisticstub we provide for React 18 users to use a stable setter function to avoid potentialuseEffectloops - specifically when using<Link viewTransition>(#14628)v7.10.0Compare Source
Minor Changes
Stabilize
fetcher.reset()(#14545)fetcher.unstable_reset()Stabilize the
dataStrategymatch.shouldRevalidateArgs/match.shouldCallHandler()APIs. (#14592)The
match.shouldLoadAPI is now marked deprecated in favor of these more powerful alternativesIf you're using this API in a custom
dataStrategytoday, you can swap to the new API at your convenience:match.shouldRevalidateArgsis the argument that will be passed to the routeshouldRevaliatefunctionCombined with the parameter accepted by
match.shouldCallHandler, you can define a custom revalidation behavior for yourdataStrategy:Patch Changes
Fix a Framework Mode bug where the
defaultShouldRevalidateparameter toshouldRevalidatewould not be correct afteractionreturned a 4xx/5xx response (truewhen it should have beenfalse) (#14592)shouldRevalidatefunction relied on that parameter, you may have seen unintended revalidationsFix
fetcher.submitfailing with plain objects containing atagNameproperty (#14534)[UNSTABLE] Add
unstable_patternto the parameters for client sideunstable_onError, refactor how it's called byRouterProviderto avoid potential strict mode issues (#14573)Add new
unstable_useTransitionsflag to routers to give users control over the usage ofReact.startTransitionandReact.useOptimistic. (#14524)<HydratedRouter unstable_transition>/<RouterProvider unstable_transition>React.startTransitionReact.startTransitiontrueif you run into this scenario to get the enhanceduseOptimisticbehavior (requires React 19)trueReact.startTransition(as they are without the flag)Link/Formnavigations will be wrapped inReact.startTransitionReact.useOptimistic(i.e.,useNavigation(),useFetchers(), etc.)falseReact.startTransitionorReact.useOptimisticon any navigations or state changes<BrowserRouter unstable_useTransitions>React.startTransitiontrueReact.startTransition(as they are without the flag)Link/Formnavigations will be wrapped inReact.startTransitionfalseReact.startTransitionon any navigations or state changesFix the promise returned from
useNavigatein Framework/Data Mode so that it properly tracks the duration ofpopstatenavigations (i.e.,navigate(-1)) (#14524)Fix internal type error in useRoute types that surfaces when skipLibCheck is disabled (#14577)
Preserve
statusTexton theErrorResponseinstance when throwingdata()from a route handler (#14555)Optimize href() to avoid backtracking regex on splat (#14329)
v7.9.6Compare Source
Patch Changes
[UNSTABLE] Add
location/paramsas arguments to client-sideunstable_onErrorto permit enhanced error reporting. (#14509)unstable_onError. The seconderrorInfoparameter is now an object withlocationandparams:Properly handle ancestor thrown middleware errors before
next()on fetcher submissions (#14517)Fix issue with splat routes interfering with multiple calls to patchRoutesOnNavigation (#14487)
Normalize double-slashes in
resolvePath(#14529)v7.9.5Compare Source
Patch Changes
Move RSCHydratedRouter and utils to
/domexport. (#14457)useRoute: return type-safe
handle(#14462)For example:
Ensure action handlers run for routes with middleware even if no loader is present (#14443)
Add
unstable_instrumentationsAPI to allow users to add observablity to their apps by instrumenting route loaders, actions, middlewares, lazy, as well as server-side request handlers and client side navigations/fetches (#14412)entry.server.tsx:export const unstable_instrumentations = [...]entry.client.tsx:<HydratedRouter unstable_instrumentations={[...]} />createBrowserRouter(routes, { unstable_instrumentations: [...] })This also adds a new
unstable_patternparameter to loaders/actions/middleware which contains the un-interpolated route pattern (i.e.,/blog/:slug) which is useful for aggregating performance metrics by routev7.9.4Compare Source
Patch Changes
handle external redirects in from server actions (#14400)
New (unstable)
useRoutehook for accessing data from specific routes (#14407)For example, let's say you have an
adminroute somewhere in your app and you want any child routes ofadminto all have access to theloaderDataandactionDatafromadmin.You might even want to create a reusable widget that all of the routes nested under
admincould use:In framework mode,
useRouteknows all your app's routes and gives you TS errors when invalid route IDs are passed in:useRoutereturnsundefinedif the route is not part of the current page:Note: the
rootroute is the exception since it is guaranteed to be part of the current page.As a result,
useRoutenever returnsundefinedforroot.loaderDataandactionDataare marked as optional since they could be accessed before theactionis triggered or after theloaderthrew an error:If instead of a specific route, you wanted access to the current route's
loaderDataandactionData, you can calluseRoutewithout arguments:This usage is equivalent to calling
useLoaderDataanduseActionData, but consolidates all route data access into one hook:useRoute.Note: when calling
useRoute()(without a route ID), TS has no way to know which route is the current route.As a result,
loaderDataandactionDataare typed asunknown.If you want more type-safety, you can either narrow the type yourself with something like
zodor you can refactor your app to pass down typed props to yourAdminWidget:v7.9.3Compare Source
Patch Changes
Do not try to use
turbo-streamto decode CDN errors that never reached the server (#14385)Fix Data Mode regression causing a 404 during initial load in when
middlewareexists without anyloaderfunctions (#14393)v7.9.2Compare Source
Patch Changes
middlewareon initial load even if no loaders exist (#14348)createRoutesStubto run route middleware<RoutesStub future={{ v8_middleware: true }} />flag to enable the propercontexttypeUpdate Lazy Route Discovery manifest requests to use a singular comma-separated
pathsquery param instead of repeatedpquery params (#14321)[UNSTABLE] Add
fetcher.unstable_reset()API (#14206)Made useOutlet element reference have stable identity in-between route chages (#13382)
feat: enable full transition support for the rsc router (#14362)
In RSC Data Mode, handle SSR'd client errors and re-try in the browser (#14342)
Support
middlewareprop on<Route>for usage with a data router viacreateRoutesFromElements(#14357)Handle encoded question mark and hash characters in ancestor splat routes (#14249)
Fail gracefully on manifest version mismatch logic if
sessionStorageaccess is blocked (#14335)v7.9.1Compare Source
Patch Changes
Futureinterface naming frommiddleware->v8_middleware(#14327)v7.9.0Compare Source
Minor Changes
Stabilize middleware and context APIs. (#14215)
We have removed the
unstable_prefix from the following APIs and they are now considered stable and ready for production use:RouterContextProvidercreateContextcreateBrowserRoutergetContextoption<HydratedRouter>getContextpropPlease see the Middleware Docs, the Middleware RFC, and the Client-side Context RFC for more information.
Patch Changes
meta()JSON-LD content (#14316)hreffunction available in a react-server context (#14262)getPayload()is called to allow for "in-context" decoding and hoisting of contextual assets (#14248)href()now correctly processes routes that have an extension after the parameter or are a single optional parameter. (#13797)v7.8.2Compare Source
Patch Changes
[UNSTABLE] Remove Data Mode
future.unstable_middlewareflag fromcreateBrowserRouter(#14213)getLoadContexttype behavior change[UNSTABLE] Add
<RouterProvider unstable_onError>/<HydratedRouter unstable_onError>prop for client side error reporting (#14162)server action revalidation opt out via $SKIP_REVALIDATION field (#14154)
Properly escape interpolated param values in
generatePath()(#13530)Maintain
ReadonlyMapandReadonlySettypes in server response data. (#13092)[UNSTABLE] Delay serialization of
.dataredirects to 202 responses until after middleware chain (#14205)Fix
TypeErrorif you throw from `patchRoutesOnNavigatConfiguration
📅 Schedule: (UTC)
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR was generated by Mend Renovate. View the repository job log.